package com.hkts.management.cargo.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.hkts.management.cargo.entity.HktsCargo;
import com.hkts.management.common.utils.Result;
import com.hkts.management.common.utils.ResultUtil;
import com.hkts.management.model.DTO.HktsCargoDTO;
import com.hkts.management.model.DTO.HktsCargoTo;
import com.hkts.management.model.DTO.PcCargoDTO;
import com.hkts.management.model.result.ResultData;
import com.baomidou.mybatisplus.extension.service.IService;
import com.hkts.management.common.utils.CustomPage;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

/**
 * <p>
 * 服务类
 * </p>
 *
 * @author hml
 * @since 2021-04-22
 */
public interface IHktsCargoService extends IService<HktsCargo> {

    /**
     * 分页查询
     *
     * @param page
     * @param hktsCargo
     * @return
     */
    IPage<HktsCargo> selectPage(Page<HktsCargo> page, HktsCargo hktsCargo);

    List<HktsCargo> selectList(HktsCargo hktsCargo);

    /**
     * 货源详情
     * @param id
     * @return
     */
    ResultData getCargoDetailById(String id);

    /**
     * 已报名列表
     * @param page
     * @return
     */
    public IPage<Map<String,Object>> getOrdersPageByApply(Page page,String cargoId);

    /**
     * 货源列表
     * @param page
     * @param hktsCargoDTO
     * @return
     */
    IPage<ResultData> getHktsCargoPageListOnPhone(Page page, HktsCargoDTO hktsCargoDTO);

    /**
     * 发布货源
     * @param hktsCargoTo
     */
    Result<HktsCargo> saveCargoAndLabelAndDetail(HktsCargoTo hktsCargoTo);


    /**
     * 编辑货源
     * @param hktsCargoTo
     * @return
     */
    /*Result updateCargoAndLabelAndDetail( HktsCargoTo hktsCargoTo);*/

    /**
     * 关闭货源
     * @param cargoId
     */
    void updateCagoStatus(String cargoId);

    /**
     * 两地间距离/千米
     * @param startArea
     * @param endArea
     * @return
     */
    BigDecimal getDistance(String startArea, String endArea);

    ResultData getCargoDetailById(String id,String lat,String lon);

    /**
     * pc货源列表
     * @param page
     * @param pcCargoDTO
     * @return
     */
    IPage<ResultData> getHktsCargoPageListOnPhonePc(Page page, PcCargoDTO pcCargoDTO);

    IPage<Map<String, Object>> getOrdersPageByApplyPc(Page page, String cargoId,String checkStatus);

    /**
     * 根据货源id获取运单列表
     * @param page
     * @param cargoId
     * @param orderStatus
     * @return
     */
    IPage<Map<String, Object>> getOrderPageListByCargoId(Page page,String cargoId,String orderStatus);

    Map<String,Object> getApplyCountAndWeight(String cargoId);

    List<Map<String, Object>> selectListByTitle();

    Map<String,Object> getOrderData(String cargoId);
}